#include "USART.h"

volatile uint8_t uart_data = 0;


uint8_t command[20];
uint8_t Command_Length;
uint8_t Switch_flag = 0;//切换黑白道次数

/************************命令*********************/
uint8_t position_status;//当前位置状态，0在黑场循迹，1在白场
uint8_t start_flag;//小车运动开始标志，1为开始

void command_Pub(void)
{
  Command_Length = Command_GetCommand(command);
  if (Command_Length != 0)
  {
    uart0_send_string(command);
    Expand = command[2];
    static uint8_t last_status;
    static uint8_t next_status[256];
    static uint8_t next_Z;
    last_status = position_status;
    for(int i=0;i++;i<256)
    {
      position_status = command[3];
      next_status[i] = position_status;
    }
    if(last_status==0)
    {
      for(int i=0;i++;i<256)
      {
        next_Z+=next_status[i];
      }
      if(next_Z>240)Switch_flag++;
    }


    if(last_status==1)
    {
      for(int i=0;i++;i<256)
      {
        next_Z+=next_status[i];
      }
      if(next_Z<10)Switch_flag++;
    }

    start_flag = command[4];

    if(Expand > 30)Expand = Expand - 256;
    // if(last_status!=next_status)Switch_flag++;//每次切换令切换次数++




 }
}

void USART_TX(void) {
  char TX[70];
  
  // sprintf(TX, "A:%d,B:%d\r\n",A,B);
  // uart0_send_string(TX);
  


  // sprintf(TX, "%.2f,%.2f,%.2f,%.2f,%d\n", motorA.target, motorA.now,
  //         motorB.target, motorB.now, cnt);
  // uart0_send_string(TX);

  
  sprintf(TX, "P:%.2f,R:%.2f,Y:%.2f,%d,%d,%.2f\r\n",mpu6050.pitch,mpu6050.roll,mpu6050.yaw,start_flag,position_status,yaw);
  uart0_send_string(TX);
  
}

// 串口的中断服务函数
void UART_0_INST_IRQHandler(void) {
  // 如果产生了串口中断
  switch (DL_UART_getPendingInterrupt(UART_0_INST)) {
  case DL_UART_IIDX_RX: // 如果是接收中断
    // 将发送过来的数据保存在变量中
      uart_data = DL_UART_Main_receiveData(UART_0_INST);
      // 将保存的数据再发送出去
      uart0_send_char(uart_data);
      Command_Write(&uart_data, 1);
 
    break;

  default: // 其他的串口中断
    break;
  }
}



// 串口发送单个字符
void uart0_send_char(char ch) {
  // 当串口0忙的时候等待，不忙的时候再发送传进来的字符
  while (DL_UART_isBusy(UART_0_INST) == true)
    ;
  // 发送单个字符
  DL_UART_Main_transmitData(UART_0_INST, ch);
}
// 串口发送字符串
void uart0_send_string(char *str) {
  // 当前字符串地址不在结尾 并且 字符串首地址不为空
  while (*str != 0 && str != 0) {
    // 发送字符串首地址中的字符，并且在发送完成之后首地址自增
    uart0_send_char(*str++);
  }
}


// 串口发送单个字符
void uart2_send_char(char ch) {
  // 当串口0忙的时候等待，不忙的时候再发送传进来的字符
  while (DL_UART_isBusy(UART_COMPUTER_INST) == true)
    ;
  // 发送单个字符
  DL_UART_Main_transmitData(UART_COMPUTER_INST, ch);
}
// 串口发送字符串
void uart2_send_string(char *str) {
  // 当前字符串地址不在结尾 并且 字符串首地址不为空
  while (*str != 0 && str != 0) {
    // 发送字符串首地址中的字符，并且在发送完成之后首地址自增
    uart0_send_char(*str++);
  }
}